if (typeof(JapWord) == "undefined") {
	JapWord = {};
}

JapWord.WebApp = new (function() {
	
	var $this = this;
	var hasUpdateCache = false;

	/**
	 * Indique si la WebApp vient d'être démarré.
	 * S'active quand:
	 * - Il y a un switch d'app
	 * - L'ouverture de l'app
	 * - Après retour du home screen
	 *
	 * Nécessite que tous les liens vers index.html comportant un #started
	 */
	this.isStartingWebApp = function() {
		return (window.navigator.standalone && JapWord.Page.isIndexPage(JapWord.Page.getPage()) && JapWord.Page.getHash() == "");
	};
	
	/**
	 * Fonction d'initialisation de la webapp
	 * Renvoie sur la dernière page où était l'utilisateur
	 */
	this.initWebApp = function() {

		JapWord.Page.loadSavedPage();
		
		if (JapWord.Page.page && JapWord.Page.page != JapWord.Page.getPage()) { // Si on est pas déjà à la dernière page sauvegardé, on fait un window.location
			window.location = JapWord.Page.page;
		}
	};
	
	this.changeHomeLink = function() {
		if (window.navigator.standalone) {
			var links = $$("a");
			for (var i = 0; i < links.length; i++) {
				if (links[i].getAttribute("href") == "index.html") {
					links[i].setAttribute("href", $this.getHomeHref());;
				}
			}
		}
	};
	
	this.getHomeHref = function() {
		var href = "index.html";
		if (window.navigator.standalone) {
			href += "#started";
		}
		return href;
	}
	
	this.reloadCache = function() {
		
		if (hasUpdateCache) {
			if (confirm("Une mise à jour est disponible. Voulez-vous l'effectuer ?")) {
				window.applicationCache.swapCache();
				window.location.hash = "";
				window.location.reload();
			}
		} else {
			new Ajax.Request(JapWord.DynURL.UPDATE_CACHE, {
				asynchronous: false
			});	
			window.location.hash = "#reloadcache";
			window.location.reload();
		}
	};
	
	function oncacheUpdate() {
		if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
			hasUpdateCache = true;
		}
		if (window.location.hash == "#reloadcache") {
			window.location.hash = "";
			if (hasUpdateCache) {
				$this.reloadCache();
			} else {
				alert("L'application est déjà à jour.");
			}
		}
		
	}
	
	
	
	
	if (window.applicationCache) {
		window.applicationCache.addEventListener('updateready',oncacheUpdate , false);
		window.applicationCache.addEventListener('noupdate',oncacheUpdate , false);
	}
	
	if ($this.isStartingWebApp()) {
		this.initWebApp();
	}

	// Sauvegarde de la page courante à chaque chargement de page
	document.observe("dom:loaded", function() { 
		JapWord.Page.saveCurrentPage()
		$this.changeHomeLink();
		var dictionnary = localStorage.getItem("Dictionnary");
		if (!dictionnary) {
			new Ajax.Request(JapWord.DynURL.GET_DICTIONNARY, {
				asynchronous: false,
				onSuccess: function(response) {
					var data = response.responseJSON;
					localStorage.setItem("Dictionnary", JSON.stringify(data));
					JapWord.Dictionnary.lastUpdate = data.lastUpdate;
					JapWord.Dictionnary.entries = data.entries;
				}
			});
		} else {
			var data = JSON.parse(dictionnary);
			JapWord.Dictionnary.lastUpdate = data.lastUpdate;
			JapWord.Dictionnary.entries = data.entries;			
		}
	});
});